/******************************************************************************* 
  Copyright (C), 1988-2020, zeno Tech. Co., Ltd.
  Description:  SYS模块总头文件
  Function List:
            
*******************************************************************************/
#ifndef SYS_IF_H 
#define SYS_IF_H  

#ifdef __cplusplus
extern "C" {
#endif

/*=============================================================================
                                 Includes                                  
==============================================================================*/
#include <sysDebug.h>
#include <sysWtd.h>
#include <sysIrcut.h>
#include <sysComm.h>
#include <sysNetCfg.h>
#include <sysIni.h>
#include <sysEnv.h>
#include <sysTemp.h>

/*=============================================================================
                               Macro Definition
==============================================================================*/

                        
/*=============================================================================
                        Local Structures and Typedef 
==============================================================================*/
/* cpu类型 */
typedef enum
{
    SYS_CPU_HI3518A,
    SYS_CPU_HI3518C,
    SYS_CPU_HI3518E,
    SYS_CPU_HI3516A,
    SYS_CPU_HI3516C,
    SYS_CPU_DM8127,
    SYS_CPU_HI3516D,
    SYS_CPU_M388C,
    SYS_CPU_GM8136,
    SYS_CPU_GK7107,
    SYS_CPU_HI3518EV200,
    SYS_CPU_HI3519,
    SYS_CPU_HI3516CV200,
    SYS_CPU_HI3519V101,
    SYS_CPU_HI3516CV300
} SYS_cpuType_t;

/*无线网卡设备类型*/
typedef enum
{
    SYS_MT7601U,
    SYS_RTL8188,
}SYS_wlanType_t;

/* 设备信息结构体 */
typedef struct
{
    SYS_cpuType_t cpuType;          /* cpu类型 */
    
    unsigned int reserved[31];
} SYS_devInfo_t;

/* boot参数 */
typedef struct 
{
    char xapp;                  /* 0: 应用程序不启动 1: 应用程度启动 */
    unsigned char mac[6];
    char xuart;                 /* 0: 串口开启 1: 串口不开启 */
} SYS_bootPar_t;

/* 光敏亮度信息 */
typedef struct 
{
    unsigned int strength;       /* 光敏获取到的亮度值 归一化0~1000 */
    unsigned int upperLimit;     /* 亮度上限 */
    unsigned int lowerLimit;     /* 亮度下限 */
    int reserved[29];            /* 保留字段 */
} SYS_ldrBrightInfo_t;

/*=============================================================================
                             extern  Variables                                  
==============================================================================*/


/*=============================================================================
                             Function Definition                                  
==============================================================================*/ 
/*******************************************************************************
  Function:     SYS_GetLdrValue
  Description:  获取光敏电阻的状态值
  Input:        无
  Output:       -pValue，光敏电阻状态值 0: 白天 1:黑夜 -1:光敏电阻不存
  Return:       0: 操作成功
                ~0: 操作失败
  Others:       无
*******************************************************************************/
int SYS_GetLdrValue(int *pValue);

/*******************************************************************************
  Function:     SYS_GetLdrBrightInfo
  Description:  获取光敏电阻的亮度信息
  Input:        无
  Output:       -pLdrBright:光敏亮度信息
  Return:       0: 操作成功
                ~0: 操作失败
  Others:       无
*******************************************************************************/
int SYS_GetLdrBrightInfo(SYS_ldrBrightInfo_t *pLdrBright);

/*******************************************************************************
  Function:     SYS_GetKeyValue
  Description:  获取按键的状态值
  Input:        - keyId: 按键编号，定义见SYS_keyId_t
  Output:       - pValue: 按键值   gpio按键 0: 未按下 1: 按下
  Return:       0: 操作成功
                ~0: 操作失败
  Others:       无
*******************************************************************************/
int SYS_GetKeyValue(unsigned int keyId, unsigned int *pValue);

/*******************************************************************************
  Function:     SYS_EnableWlan
  Description:  使能无线网卡
  Input:        -wlanId :无线网卡ID
                -enable :是否使能，1:使能，0:禁止
  Output:       无
  Return:       0: 操作成功
                ~0: 操作失败
  Others:       无
*******************************************************************************/
int SYS_EnableWlan(int wlanId, int enable);

/*******************************************************************************
  Function:     SYS_GetWlanNum
  Description:  获取无线网卡个数
  Input:        无
  Output:       无
  Return:       >=0: 无线网卡个数
                <0: 操作失败
  Others:       无
*******************************************************************************/
int SYS_GetWlanNum(void);

/*******************************************************************************
  Function:     SYS_SenSorReset
  Description:  sensor复位
  Input:        无
  Output:       无
  Return:       0: 操作成功
                ~0: 操作失败
  Others:       无
*******************************************************************************/
int SYS_SenSorReset(void);


/*******************************************************************************
  Function:     SYS_GetWlanCfg
  Description:  获取无线网卡配置
  Input:        -wlanId :无线网卡ID
  Output:       -pWlanType:无线网卡类型指针
  Return:       0: 操作成功
                ~0: 操作失败
  Others:       无
*******************************************************************************/
int SYS_GetWlanCfg(int wlanId, unsigned int *pWlanType);

/*******************************************************************************
  Function:     SYS_GetDevInfo
  Description:  获取设备信息
  Input:        无
  Output:       - pDevInfo: 设备信息
  Return:       0: 操作成功
                ~0: 操作失败
  Others:       无
*******************************************************************************/
int SYS_GetDevInfo(SYS_devInfo_t *pDevInfo);


/*******************************************************************************
  Function:     SYS_Reboot
  Description:  重启设备
  Input:        无
  Output:       无
  Return:       0: 操作成功
                <0: 操作失败
  Others:       无
*******************************************************************************/
int SYS_Reboot(void);

/*******************************************************************************
  Function:     SYS_GetJiffies
  Description:  获取系统jiffies值
  Input:        无
  Output:       无
  Return:       jiffies值
  Others:       无
*******************************************************************************/
int SYS_GetJiffies(void);

/*******************************************************************************
  Function:     SYS_StartCrypto
  Description:  启动加密检验
  Input:        无
  Output:       无
  Return:       0: 操作成功
                ~0: 操作失败
  Others:       无
*******************************************************************************/ 
void SYS_CryptoInit(void);

/*******************************************************************************
  Function:     SYS_SetPulse
  Description:  脉冲产生函数
  Input:        - gpio:gpio号
                - time:脉冲周期(us)
                - pulseNum:脉冲数
  Output:       无
  Return:       0: 操作成功
                ~0: 操作失败
  Others:       无
*******************************************************************************/
int SYS_SetPulse(int gpio, int time, int pulseNum);

/*******************************************************************************
  Function:     SYS_GetBootParam
  Description:  获取设备启动信息
  Input:        无
  Output:       - pBootParam: 设备分区信息
  Return:       0: 操作成功
                ~0: 操作失败
  Others:       无
*******************************************************************************/ 
int SYS_GetBootParam(SYS_bootPar_t *pBootParam);

/*******************************************************************************
  Function:     SYS_UartListen
  Description:  监听串口
  Input:        无
  Output:       无
  Return:       0: 操作成功
                <0: 操作失败
  Others:       无
*******************************************************************************/
int SYS_UartListen(void);

/*******************************************************************************
  Function:     SYS_GetProcessPid
  Description:  获取进程pid
  Input:        进程名
  Output:       无
  Return:       >0: 进程pid
                <0: 操作失败
  Others:       无
*******************************************************************************/
int SYS_GetProcessPid(char *pName);

/*******************************************************************************
  Function:     SYS_SystemCall
  Description:  执行命令行
  Input:        - pCommand: 命令行
  Output:       无
  Return:       0: 成功
                ~0: 失败
  Others:       无
*******************************************************************************/
int	SYS_SystemCall(const char *pCmd);

#ifdef __cplusplus
}
#endif
#endif // SYS_IF_H 

